進入控制流程 day 2, 昨天講了 if-else, when 用於對單一變數進行後續行為的判斷,今天談談迴圈 (Loop)。對大多數讀者 (工程師?),我們所面對的資料往往都是成千上萬筆,這些資料往往會使用各式資料結構儲存,例如前面幾天提過集合的列表 (List)。對於使用這類資料結構的程式來說,如果我要一筆一筆分開來寫成不同段落,不僅無法面對巨量無盡的資料,更不具有撰寫效率與維護性。

for
val school = listOf("shark", "salmon", "minnow")
for (element in school) {
print(element + " ")
}
// shark salmon minnow
這裡 element in school 會讓 element 拿到每一個 school 列表裡面的元素,透過 for 迴圈的段落可以對每個一個 element 做操作。
for + index
for ((index, element) in school.withIndex()) {
println("Item at $index is $element\n")
}
// Item at 0 is shark
// Item at 1 is salmon
// Item at 2 is minnow
如果要同時對元素在列表中的位置 (index) 操作,則可以用 .withIndex() 在遍歷整個列表的時候同時回傳當前的位置,這時候回傳的執會變成一個 Pair<idx, element>,我們可以用下面範例方法去最這樣的鍵值對操作。
do-while , while
var bubbles = 0
while (bubbles < 50) {
bubbles++
}
println("$bubbles bubbles in the water\n")
do {
bubbles--
} while (bubbles > 50)
println("$bubbles bubbles in the water\n")
除了給定的範圍內做迴圈,我們也可以對一個對應條件被滿足情況下做持續迴:do-while , while。但這裡需要注意,因為這類的迴圈並沒有給定一個明確的迴圈範圍 (例如給定一個定長的集合,所以當條件持續被滿足他就會持續迴圈下去,可能會造成程式在沒有外力介入下不會停下。
至於 之間,前者會在進入迴圈前先完成一次迴圈內容再開始迴圈,這用法單純取決於使用情境,並無優劣之分。
repeat(times)
repeat(2) {
println("A fish is swimming")
}
// A fish is swimming
// A fish is swimming
在 Kotlin 中,repeat(times) 函式可以讓我們指定一段程式碼重複執行指定的次數。在上述範例中,程式碼區塊 println("A fish is swimming") 會被執行兩次,因為我們指定了 repeat(2)。